<?xml version="1.0" encoding="UTF-8"?>
<html>
    <head>
        <link type="text/css" rel="stylesheet" href="./css/template.css" />
        <link type="text/css" rel="stylesheet" href="./css/SyntaxHighlighter.css" />
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>Refactoring dans Eclipse</title>
        <script language="javascript" src="./js/shInit.js" />
        <script language="javascript" src="./js/shCore.js" />
        <script language="javascript" src="./js/shBrushCpp.js" />
        <script language="javascript" src="./js/shBrushCSharp.js" />
        <script language="javascript" src="./js/shBrushCss.js" />
        <script language="javascript" src="./js/shBrushDelphi.js" />
        <script language="javascript" src="./js/shBrushJava.js" />
        <script language="javascript" src="./js/shBrushJScript.js" />
        <script language="javascript" src="./js/shBrushPhp.js" />
        <script language="javascript" src="./js/shBrushPython.js" />
        <script language="javascript" src="./js/shBrushRuby.js" />
        <script language="javascript" src="./js/shBrushSql.js" />
        <script language="javascript" src="./js/shBrushVb.js" />
        <script language="javascript" src="./js/shBrushXml.js" />
        <keywords>sun,java,eclipse,3.3,refactoring</keywords>
        <author>Jérémie DELLISSE</author>
    </head>
    <body>
        <div class="chapter">
            <h2>Introduction</h2>
            <p>
                La version d'Eclipse utilisée est la 3.3
                <br />
                <br />
                Le "refactoring" permet de modifier une partie du code source de manière automatisée dans tout le programme,
				permettant d'en conserver le fonctionnement originel sans devoir tout éditer manuellement. Aucune erreur ne sera donc liée à cette modification,
				alors qu'à la main, un oubli est vite arrivé.
                <br />
                <br />
                Le refactoring peut servir à mettre à jour un programme, à l'optimiser, à ajouter des fonctionnalités en restructurant le programme
				d'origine ou tout simplement à vous aider dans la création de votre programme.
            </p>
        </div>
        <div class="chapter">
            <h2>Accès à la fonction de refactoring</h2>
            <p>Pour y accéder, vous pouvez effectuer un clic droit sur la zone de code à modifier ou utiliser le raccourci clavier Alt+Shift+T.</p>
            <img src="./images/refactoring1.png" border="1" />
            <p>
                Dans ce menu seront affichées les fonctions pouvant être exécutées sur le code en question. Ne vous étonnez donc pas si vous ne voyez
				pas toutes les méthodes dans le menu.
                <br />
                <br />
                Selon la complexité de la fonction, un assistant s'ouvrira pour vous aider.
                <br />
                <br />
                Vous pouvez également accéder au refactoring via le menu "Refactor" de la barre de menu.
                <br />
                <br />
                Dans la plupart des options présentées ci-après, un bouton "Preview" vous sera présenté et vous permettra d'avoir un aperçu des modifications
				avant que celles-ci ne soient exécutées sur votre code.
            </p>
            <img src="./images/refactoring2.png" width="100%" />
        </div>
        <div class="chapter">
            <h2>Fonctions proposées</h2>
            <div class="subChapter">
                <h3>Rename</h3>
                <p>
                    Cette fonction permet de renommer l'élément sélectionné (classe, méthode ou variable) et de modifier les appels à cet élément.
                    <br />
                    Vous pouvez aussi renommer l'élément directement en le sélectionnant et en appuyant sur Alt+Shift+R.
                </p>
                <img src="./images/refactoring3.png" border="1" />
            </div>
            <div class="subChapter">
                <h3>Move</h3>
                <p>
                    Cette fonction déplace l'élément sélectionné dans un autre package ou une autre classe. Le raccourci
                    <br />
                    assigné à cette fonction est Alt+Shift+V.
                </p>
                <img src="./images/refactoring4.png" />
                <br />
                <br />
                <img src="./images/refactoring5.png" />
            </div>
            <div class="subChapter">
                <h3>Change Method Signature</h3>
                <p>
                    Cette fonction peut modifier les droits d'accès d'une signature, le type du retour, les paramètres (noms, types et ordre) et les exceptions
					de la méthode.
                    <br />
                    Le raccourci pour cette fonction est Alt+Shift+C.
                </p>
                <img src="./images/refactoring6.png" />
            </div>
            <div class="subChapter">
                <h3>Extract Method</h3>
                <p>
                    Cette fonction encapsule les éléments sélectionnés dans une nouvelle méthode et remplace les références de ces éléments par un appel à cette fonction.
                    <br />
                    Le raccourci pour cette fonction est Alt+Shift+M.
                </p>
            </div>
            <div class="subChapter">
                <h3>Extract Local Variable</h3>
                <p>
                    Cette fonction est basée sur le même principe que la précédente, mais encapsule l'expression sélectionnée dans une variable.
                    <br />
                    Le raccourci utilisé est Alt+Shift+L.
                </p>
            </div>
            <div class="subChapter">
                <h3>Extract Constant</h3>
                <p>
                    Cette fonction remplace une expression par un appel à un champ de classe avec les attributs
                    <i>static</i>
                    et
                    <i>final</i>
                    définis avec cette expression.
					Une option permet de remplacer les occurences de l'expression par un appel à cette constante.
                </p>
            </div>
            <div class="subChapter">
                <h3>Inline</h3>
                <p>
                    Cette fonction a le comportement inverse de
                    <i>Extract Local Variable</i>
                    : elle remplace le nom de la variable sélectionnée par son expression.
                    <br />
                    Le raccourci pour la fonction Inline est Alt+Shift+I.
                </p>
            </div>
            <div class="subChapter">
                <h3>Convert Anonymous Class to Nested</h3>
                <p>Cette fonction vous permet de transformer une classe anonyme trop volumineuse en une classe normale dans son propre fichier.
					Il suffit pour cela de mettre le curseur dans la classe anonyme que vous souhaitez modifier et cette fonction sera dégrisée.</p>
            </div>
            <div class="subChapter">
                <h3>Convert Member Type to Top Level</h3>
                <p>Cette fonction va créer une nouvelle classe pour le membre type sélectionné.</p>
            </div>
            <div class="subChapter">
                <h3>Convert Local Variable to Field</h3>
                <p>Cette fonction transforme une variable locale en champ de classe.</p>
            </div>
            <div class="subChapter">
                <h3>Extract Superclass</h3>
                <p>Cette fonction va créer une classe mère de l'objet sélectionné.</p>
            </div>
            <div class="subChapter">
                <h3>Extract Interface</h3>
                <p>Cette fonction analyse les éléments sélectionnés et crée une interface puis implémente cette interface sur la classe courante.</p>
            </div>
            <div class="subChapter">
                <h3>Use Supertype where possible</h3>
                <p>
                    Cette fonction analyse le code et remplace les types par l'un de ses
                    <i>supertypes</i>
                    partout où c'est possible.
                </p>
            </div>
            <div class="subChapter">
                <h3>Push down / push up</h3>
                <p>Ces fonctions déplacent la sélection dans la sous-classe ou dans la superclasse.</p>
                <p />
            </div>
            <div class="subChapter">
                <h3>Introduce Indirection</h3>
                <p>Cette fonction crée une méthode d'adressage indirecte délégant la méthode sélectionnée.</p>
            </div>
            <div class="subChapter">
                <h3>Introduce Factory</h3>
                <p>Cette fonction crée une méthode appelant le constructeur sélectionné et qui retourne l'objet créé. Tous les appels au constructeur sont remplaçés par
					des appels à cette méthode.</p>
            </div>
            <div class="subChapter">
                <h3>Introduce Parameter</h3>
                <p>Cette fonction remplace l'expression sélectionnée par un paramètre dans la méthode courante et modifie les appels à cette méthode.</p>
            </div>
            <div class="subChapter">
                <h3>Generalize Declared Type</h3>
                <p>
                    Cette fonction ouvre un assistant en indiquant quels
                    <i>supertypes</i>
                    peuvent remplacer le type de la sélection.
                </p>
                <img src="./images/refactoring7.png" />
            </div>
            <div class="subChapter">
                <h3>Infer Generic Type Arguments</h3>
                <p>Cette fonction remplace les types génériques par des types plus spécialisés là où ce remplacement est possible.</p>
            </div>
            <div class="subChapter">
                <h3>Migrate JAR file</h3>
                <p>Cette fonction permet de mettre à jour un JAR utilisé par votre programme et empêchant les erreurs possibles causées par cette mise à jour.</p>
            </div>
            <div class="subChapter">
                <h3>Create Script</h3>
                <p>Cette fonction permet de créer un script des refactoring qui ont été appliqués au workspace. Ce script peut être sauvegardé dans un fichier ou copié dans le presse-papiers.</p>
            </div>
            <div class="subChapter">
                <h3>Apply script</h3>
                <p>Cette fonction permet d'appliquer au workspace les scripts créés par la fonction précédente.</p>
            </div>
            <div class="subChapter">
                <h3>History</h3>
                <p>Cette fonction affiche un historique des refactoring appliqués au workspace et propose de les supprimer de cet historique.</p>
            </div>
        </div>
    </body>
</html>

